/******************************************************************************
 *
 * @file       resetdialog.h
 * @brief      重置密码界面
 *
 * @author     ario
 * @date       2024/08/08
 * @history
 *****************************************************************************/

#ifndef RESETDIALOG_H
#define RESETDIALOG_H

#include <QDialog>
#include "global.h"

namespace Ui {
class ResetDialog;
}

class ResetDialog : public QDialog
{
    Q_OBJECT

public:
    explicit ResetDialog(QWidget *parent = nullptr);
    ~ResetDialog();

private:
    void showTip(QString str, bool b_ok);       // 显示错误提示
    void initHttpHandlers();                    // 初始化Http发送请求的回调函数
    void AddTipErr(TipErr te, QString tips);    // 缓存出现的错误
    void DelTipErr(TipErr te);                  // 删除出现的错误

private slots:
    void slot_reset_mod_finish(ReqId req_id, QString res, ErrorCodes err);        // 接收到重置密码模块http回复的槽函数

    bool checkUserValid();                      // 检查用户名是否为空
    bool checkEmailValid();                     // 检查邮箱是否合规
    bool checkPassValid();                      // 检查密码位数和是否包含非法字符
    bool checkVerifyValid();                    // 检查验证码是否为空

    void on_get_code_clicked();                 // 获取验证码
    void on_sure_btn_clicked();                 // 发送重置密码请求

signals:
    void sigSwitchLogin();

private:
    Ui::ResetDialog *ui;
    QMap<ReqId, std::function<void(const QJsonObject &)>> _handlers;    // 保存Http请求与回调函数的map
    QMap<TipErr, QString> _tip_errs;                                    // 缓存错误码与错误提示的map
};

#endif // RESETDIALOG_H
